Nested JSON ডেটা কাঠামো একাধিক লেভেলে ডেটা ধারণ করে, যেখানে একটি JSON অবজেক্টের মধ্যে আরেকটি JSON অবজেক্ট থাকতে পারে। JSON এর এই ধরনের কাঠামোকে প্রক্রিয়াকরণ করার জন্য recursive techniques ব্যবহার করা যেতে পারে। Recursive techniques হল এমন একটি পদ্ধতি যেখানে একটি ফাংশন নিজেই নিজেকে কল করে, যা ডেটা কাঠামোর প্রতি স্তরের জন্য কার্যকরী হতে পারে।
Java তে Nested JSON Handle করতে Jackson বা Gson লাইব্রেরি ব্যবহার করা হয়। এই ধরনের ডেটা পার্স বা সিরিয়ালাইজ করার সময় recursive techniques ব্যবহার করলে, আমরা সহজে এবং দক্ষতার সাথে নেস্টেড ডেটা অ্যাক্সেস করতে পারি।
Nested JSON Example
ধরা যাক, আমাদের একটি JSON ডেটা আছে যা Nested অবজেক্ট এবং অ্যারে ধারণ করে। এখানে একটি উদাহরণ দেখানো হচ্ছে:
{
"name": "John Doe",
"address": {
"street": "123 Main St",
"city": "New York",
"zipcode": {
"code": "10001",
"area": "Downtown"
}
},
"phoneNumbers": [
{"type": "home", "number": "123-456-7890"},
{"type": "work", "number": "987-654-3210"}
]
}
এই JSON এর মধ্যে address একটি nested অবজেক্ট, এবং phoneNumbers একটি অ্যারে যা nested অবজেক্ট ধারণ করে। আমরা যদি এই ডেটা C# বা Java তে handle করতে চাই, তাহলে recursive techniques ব্যবহার করতে হবে, বিশেষ করে nested অবজেক্টগুলোকে প্রক্রিয়া করার জন্য।
Jackson ব্যবহার করে Recursive Techniques দিয়ে Nested JSON Handle করা
Jackson লাইব্রেরি Java তে JSON ডেটা প্রসেস করার জন্য একটি জনপ্রিয় টুল। Jackson ব্যবহার করে আমরা JSON স্ট্রিংকে Java Object-এ রূপান্তর (Deserialization) এবং Java Object-কে JSON স্ট্রিং-এ রূপান্তর (Serialization) করতে পারি।
১. Jackson এর মাধ্যমে Nested JSON Handle করা
ধরা যাক, আমরা উল্লিখিত JSON ডেটাকে Java Object-এ রূপান্তর করতে চাই এবং recursive পদ্ধতিতে নেস্টেড অবজেক্ট এবং অ্যারে অ্যাক্সেস করতে চাই।
Java ক্লাস তৈরি করা:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;
public class Person {
private String name;
private Address address;
private List<PhoneNumber> phoneNumbers;
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public List<PhoneNumber> getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
public static class Address {
private String street;
private String city;
private Zipcode zipcode;
// Getter and Setter methods
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public Zipcode getZipcode() {
return zipcode;
}
public void setZipcode(Zipcode zipcode) {
this.zipcode = zipcode;
}
}
public static class Zipcode {
private String code;
private String area;
// Getter and Setter methods
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
}
public static class PhoneNumber {
private String type;
private String number;
// Getter and Setter methods
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
public static void main(String[] args) throws Exception {
String jsonString = "{\"name\": \"John Doe\", \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\", \"zipcode\": {\"code\": \"10001\", \"area\": \"Downtown\"}}, \"phoneNumbers\": [{\"type\": \"home\", \"number\": \"123-456-7890\"}, {\"type\": \"work\", \"number\": \"987-654-3210\"}]}";
// Jackson ObjectMapper ব্যবহার করে JSON থেকে Java Object এ রূপান্তর
ObjectMapper objectMapper = new ObjectMapper();
Person person = objectMapper.readValue(jsonString, Person.class);
// Output nested values
System.out.println("Name: " + person.getName());
System.out.println("Street: " + person.getAddress().getStreet());
System.out.println("City: " + person.getAddress().getCity());
System.out.println("Zip Code: " + person.getAddress().getZipcode().getCode());
System.out.println("Area: " + person.getAddress().getZipcode().getArea());
for (PhoneNumber phone : person.getPhoneNumbers()) {
System.out.println(phone.getType() + " Phone: " + phone.getNumber());
}
}
}
Explanation:
Personক্লাসের মধ্যেaddressএবংphoneNumbersফিল্ড গুলো nested JSON অবজেক্ট এবং অ্যারের জন্য ব্যবহৃত হয়েছে।AddressএবংZipcodeক্লাসে nested অবজেক্টগুলোর জন্য getter এবং setter মেথড রাখা হয়েছে।ObjectMapperব্যবহার করে JSON স্ট্রিং থেকেPersonঅবজেক্টে রূপান্তর করা হয়েছে।- JSON ডেটা থেকে nested অবজেক্ট এবং অ্যারে এর মান অ্যাক্সেস করা হয়েছে।
আউটপুট:
Name: John Doe
Street: 123 Main St
City: New York
Zip Code: 10001
Area: Downtown
home Phone: 123-456-7890
work Phone: 987-654-3210
২. Recursive Techniques ব্যবহার করে Dynamic Nested JSON Handle করা
যদি JSON ডেটার কাঠামো ডায়নামিক হয় এবং জানা না থাকে যে কত লেভেল পর্যন্ত nested অবজেক্ট থাকতে পারে, তখন recursive techniques ব্যবহার করা দরকার। এখানে একটি উদাহরণ দেওয়া হলো যেখানে JSON অবজেক্টকে রিকার্সিভভাবে প্রক্রিয়া করা হয়েছে।
উদাহরণ:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class RecursiveJsonExample {
public static void main(String[] args) throws IOException {
String jsonString = "{\"name\": \"John Doe\", \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\", \"zipcode\": {\"code\": \"10001\", \"area\": \"Downtown\"}}, \"phoneNumbers\": [{\"type\": \"home\", \"number\": \"123-456-7890\"}, {\"type\": \"work\", \"number\": \"987-654-3210\"}]}";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonString);
// Recursive method to print all keys and values
printJsonNode(rootNode);
}
public static void printJsonNode(JsonNode node) {
if (node.isObject()) {
node.fieldNames().forEachRemaining(fieldName -> {
JsonNode childNode = node.get(fieldName);
System.out.println(fieldName + ": " + childNode.asText());
// Recursively handle nested objects
if (childNode.isObject() || childNode.isArray()) {
printJsonNode(childNode);
}
});
} else if (node.isArray()) {
for (JsonNode arrayElement : node) {
printJsonNode(arrayElement);
}
}
}
}
Explanation:
JsonNodeব্যবহার করা হয়েছে যাতে ডাইনামিকভাবে JSON স্ট্রাকচার হ্যান্ডেল করা যায়।printJsonNodeমেথডটি রিকার্সিভ পদ্ধতিতে JSON অবজেক্ট এবং অ্যারে গুলি প্রক্রিয়া করছে।
সারাংশ
Recursive techniques ব্যবহার করে nested JSON ডেটা হ্যান্ডলিং Java তে খুবই কার্যকরী। Jackson লাইব্রেরি ব্যবহার করে সহজে nested JSON অবজেক্ট এবং অ্যারে গুলি প্রক্রিয়া করা যায়। এই ধরনের ডেটাকে সঠিকভাবে অ্যাক্সেস করতে রিকার্সিভ পদ্ধতি খুবই উপকারী, বিশেষ করে যখন JSON স্ট্রাকচার ডায়নামিক বা জটিল হয়।
Read more